package cn.school.studyManage.service.impl;

import cn.school.common.exception.ApiException;
import cn.school.common.utils.StringUtils;
import cn.school.studyManage.dao.StudentBehaviorCfgDao;
import cn.school.studyManage.dao.StudentBehaviorCfgItemDao;
import cn.school.studyManage.dto.StudentBehaviorCfgDTO;
import cn.school.studyManage.entity.StudentBehaviorCfg;
import cn.school.studyManage.entity.StudentBehaviorCfgItem;
import cn.school.studyManage.service.StudentBehaviorCfgService;
import cn.school.studyManage.vo.StudentBehaviorCfgQueryVo;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;


@Service
public class StudentBehaviorCfgServiceImpl extends ServiceImpl<StudentBehaviorCfgDao, StudentBehaviorCfg> implements StudentBehaviorCfgService {

    @Autowired
    StudentBehaviorCfgDao cfgDao;

    @Autowired
    StudentBehaviorCfgItemDao cfgItemDao;

    @Override
    public IPage<StudentBehaviorCfg> findCfgPageList(StudentBehaviorCfgQueryVo vo) {
        int count = cfgDao.findCfgListCount(vo);
        int startNum = (vo.getPageNum() - 1) * vo.getPageSize();
        List<StudentBehaviorCfg> list = cfgDao.findCfgPageList(startNum,vo.getPageSize(),vo);
        IPage<StudentBehaviorCfg> page = new Page<>();
        page.setTotal(count);
        page.setRecords(list);
        return page;
    }

    @Override
    @Transactional
    public boolean createOrUpdateCfg(StudentBehaviorCfgDTO dto) {
        Long cfgId = dto.getId();
        if(cfgId == null){
            //create
            StudentBehaviorCfg cfg = new StudentBehaviorCfg();
            cfg.setBehaviorTitle(dto.getBehaviorTitle());
            cfg.setScoreCycle(dto.getScoreCycle());
            cfg.setStatus(0);
            cfgDao.createCfg(cfg);
            List<StudentBehaviorCfgItem> cfgItemList = dto.getBehaviorCfgItemList();
            for(StudentBehaviorCfgItem cfgItem : cfgItemList){
                cfgItem.setCfgId(cfg.getId());
            }
            cfgItemDao.createCfgItemBatch(cfgItemList);
        }else {
            //update
            QueryWrapper<StudentBehaviorCfg> wrapper = new QueryWrapper<>();
            wrapper.eq("id",cfgId);
            if(cfgDao.selectOne(wrapper).getStatus() != 0){
                throw new ApiException("正在使用中的配置不可修改");
            }else {
                StudentBehaviorCfg cfg = new StudentBehaviorCfg();
                cfg.setId(cfgId);
                cfg.setScoreCycle(dto.getScoreCycle());
                cfgDao.updateById(cfg);
                //查询是否存在子表数据，有则先删除
                List<Long> itemIdList = cfgItemDao.findItemIdByCfgId(cfgId);
                if(itemIdList != null && itemIdList.size() > 0){
                    cfgItemDao.delByCfgId(cfgId);
                }
                List<StudentBehaviorCfgItem> cfgItemList = dto.getBehaviorCfgItemList();
                //配置项不为空
                if(cfgItemList != null && cfgItemList.size() > 0){
                    for(StudentBehaviorCfgItem item : cfgItemList){
                        if(StringUtils.isEmpty(item.getMarkItem())){
                            throw new ApiException("不可提交空数据！！！");
                        }
                        item.setCfgId(cfgId);
                    }
                    cfgItemDao.createCfgItemBatch(cfgItemList);
                }
            }
        }
        return true;
    }

    @Override
    public boolean delCfg(Long id) {
        StudentBehaviorCfg cfg = cfgDao.selectById(id);
        if(cfg.getStatus() != 0){
            throw new ApiException("不可删除正在使用中的配置！！！");
        }else {
            cfgDao.deleteById(id);
            cfgItemDao.delByCfgId(id);
        }
        return true;
    }

    @Override
    public StudentBehaviorCfg findCfgByTeacher() {
//        SysUser sysUser = SysUserUtils.getSysUser();
//        sysUser.getId();


        return null;
    }

//    @Override
//    public IPage<StudentBehaviorCfgVo> findCfgPageList(StudentBehaviorCfgVo vo) {
//        int count = cfgDao.findCfgListCount(vo);
//        int startNum = (vo.getPageNum() - 1) * vo.getPageSize();
//        List<StudentBehaviorCfgVo> list = cfgDao.findCfgPageList(startNum,vo.getPageSize(),vo);
//        IPage<StudentBehaviorCfgVo> page = new Page<>();
//        page.setTotal(count);
//        page.setRecords(list);
//        return page;
//    }
//
//    @Override
//    @Transactional
//    public boolean addOrUpdateCfg(StudentBehaviorCfgDTO dto) {
//        if(StringUtils.isEmpty(dto.getScoreTheme())){
//            throw new ApiException("必填字段为空！！！");
//        }
//        Long cfgId = dto.getId();
//        //查询
//        QueryWrapper<StudentInfo> wrapper = new QueryWrapper<>();
//        wrapper.eq("class_id",dto.getClassId());
//        List<StudentInfo> studentInfos = studentInfoDao.selectList(wrapper);
//        if(studentInfos == null &&studentInfos.size() <= 0){
//            throw new ApiException("该班级无学生，不可添加配置");
//        }
//        if(cfgId == null){
//            cfgDao.createCfg(dto);
//            cfgId = dto.getId();
//            List<StudentBehaviorScore> scoreList = new ArrayList<>();
//            for(StudentInfo student : studentInfos){
//                StudentBehaviorScore score = new StudentBehaviorScore();
//                score.setCfgId(cfgId);
//                score.setStudentId(student.getStudentId());
//                score.setStatus(0);
//                scoreList.add(score);
//            }
//            scoreDao.createScoreBatch(scoreList);
//        }else{
//            List<Integer> scoreStatusList = scoreDao.findStatusByCfgId(cfgId);
//            for(Integer scoreStatus : scoreStatusList){
//                if(scoreStatus != 0){
//                    throw new ApiException("已评价或超过评分期限不可修改！！！");
//                }
//            }
//            //更新配置表信息
//            StudentBehaviorCfgVo cfgVo = new StudentBehaviorCfgVo();
//            cfgVo.setId(cfgId);
//            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
//            try {
//                cfgVo.setStartTime(sdf.parse(dto.getStartTime()));
//                cfgVo.setEndTime(sdf.parse(dto.getEndTime()));
//            }catch (ParseException e){
//                throw new ApiException("日期错误");
//            }
//            cfgVo.setScoreCycle(dto.getScoreCycle());
//            cfgDao.updateById(cfgVo);
//            //查询是否存配置项
//            List<Long> itemIdList = cfgItemDao.findItemIdByCfgId(cfgId);
//            if(itemIdList != null && itemIdList.size() > 0){
//                //删除配置项表数据及学生分数评分表
//                itemScoreDao.delBatchByItemIdList(itemIdList);
//                cfgItemDao.delByCfgId(cfgId);
//            }
//        }
//        List<StudentBehaviorCfgItem> cfgItemList = dto.getBehaviorCfgItemList();
//        //配置项不为空
//        if(cfgItemList != null && cfgItemList.size() > 0){
//            for(StudentBehaviorCfgItem item : cfgItemList){
//                if(StringUtils.isEmpty(item.getScoreItem())){
//                    throw new ApiException("不可提交空数据！！！");
//                }
//                item.setCfgId(cfgId);
//            }
//            cfgItemDao.createCfgItemBatch(cfgItemList);
//            List<StudentBehaviorItemScore> itemScoreList = new ArrayList<>();
//            for(StudentBehaviorCfgItem item : cfgItemList){
//                for(StudentInfo student : studentInfos){
//                    StudentBehaviorItemScore itemScore = new StudentBehaviorItemScore();
//                    itemScore.setCfgItemId(item.getId());
//                    itemScore.setStudentId(student.getStudentId());
//                    itemScoreList.add(itemScore);
//                }
//            }
//            itemScoreDao.createItemScoreBatch(itemScoreList);
//        }
//        return true;
//    }
//
//    @Override
//    public boolean delCfg(Long id) {
//        StudentBehaviorCfg cfg = cfgDao.selectById(id);
//        if(cfg.getStatus() != 0){
//            throw new ApiException("不可删除正在使用中的配置！！！");
//        }else {
//            cfgDao.deleteById(id);
//            cfgItemDao.delByCfgId(id);
//        }
//        List<StudentBehaviorScore> scoreList = scoreDao.findScoreByCfgId(id);
//        for(StudentBehaviorScore score : scoreList){
//            if(score.getStatus() != 0){
//                throw new ApiException("不可删除正在使用中的配置！！！");
//            }
//        }
//        cfgDao.deleteById(id);
//        scoreDao.delBatchByCfgId(id);
//        List<Long> itemIdList = cfgItemDao.findItemIdByCfgId(id);
//        if(itemIdList != null && itemIdList.size() > 0){
//            //删除配置项表数据及学生分数评分表
//            itemScoreDao.delBatchByItemIdList(itemIdList);
//            cfgItemDao.delByCfgId(id);
//        }
//        return true;
//    }
}